package swing;

import java.awt.Desktop.Action;
import java.awt.Font;
import java.awt.RenderingHints.Key;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

// 메뉴 작성법
// JMenuBar -> JMenu -> JMenuItem
public class SwingMenu extends JMenuBar {
	
	private JMenu mnFile = null; // 파일
	private JMenu mnEdit = null; // 편집
	private JMenu mnView = null; // 보기
	private JMenu mnTool = null; // 도구
	private JMenu mnWnd = null; // 창
	private JMenu mnHelp = null; // 도움말
	
	private static SwingMenuActionList mnal = null;
	
	public SwingMenu() {
		mnal = new SwingMenuActionList();
		MakeMenu();
		addMenu();
		makeMenuItem();
		addshortCut();
		// 메뉴바에 추가할 메뉴를 생성함
	}
	private void addshortCut() {
		mnFile.setMnemonic(KeyEvent.VK_F);
	}
	
	private void MakeMenu() {
		mnFile = new JMenu("파 일(F)");
		mnEdit = new JMenu("편 집(E)");
		mnView = new JMenu("보 기(V)");
		mnTool = new JMenu("도 구(T)");
		mnWnd = new JMenu(" 창 (W)");
		mnHelp = new JMenu("도움말(H)");
		// mnFile.setFont(new Font("맑은 고딕", Font.BOLD,12));
		// 메뉴 글꼴 변경을 위해 setFont 메서드 사용
		// 하지만, 모든 메뉴항목에 setFont를 사용하는것은 무척 번거로운 일임
		// 폰트를 다른것으로 바꾸는 날이면....
		// 따라서, 프로그램 전체 글꼴을 변경하는 방법을 이용
		// main 메서드에서 FontUIResource 이용함
		
	}
	private void addMenu() {
		add(mnFile);
		add(mnEdit);
		add(mnView);
		add(mnTool);
		add(mnWnd);
		add(mnHelp);
	}
	// 메뉴에 추가할 메뉴항목menuitem 생성
	// 배열을 이용하면 쬐끔 편해짐
	private JMenuItem makeMenuItems(
		String text, String img, int skey, boolean off, int akey ){
		
	    String icon = null; // 메뉴에 쓸 아이콘
		if(img != null)	// 아이콘이미지가 있으면
			icon = "/images/menu/" + img + ".png";
		
		JMenuItem mnitem = null;
	     // 메뉴항목
		try{
			mnitem = new JMenuItem(text, new ImageIcon(getClass().getResource(icon)));
		}catch(Exception ex){
			mnitem = new JMenuItem(text);
		}
		mnitem.setEnabled(off); // 메뉴 활성/비활성
		mnitem.setMnemonic(KeyEvent.VK_1);
		mnitem.setAccelerator(KeyStroke.getKeyStroke(akey,
				ActionEvent.CTRL_MASK)); //단축키
		// 이벤트 처리관련 메서드 등록
		mnitem.addActionListener(mnal);
		mnitem.setActionCommand(img);
		return mnitem;
	}
	private void makeMenuItem() {
		mnFile.add(makeMenuItems("  새파일(N)    ","new",KeyEvent.VK_N,true,KeyEvent.VK_1));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("  닫기(C)","close",KeyEvent.VK_C,false,KeyEvent.VK_2));
		mnFile.addSeparator();
		mnFile.add(makeMenuItems("  종료(X)","exit",KeyEvent.VK_X,true,KeyEvent.VK_3));
		mnFile.addSeparator();	
		mnHelp.add(makeMenuItems("프로젝트정보(I)", "about", KeyEvent.VK_A, true, 0));
		}
}